#导入flaks内痔对象
from flask import session, render_template, current_app,jsonify
#导入蓝图对象
from . import news_blue
from info.utlis.response_code import RET
#盗图模型咧
from info.models import User, Category,News
#导入常量文件
from info import constants


@news_blue.route('/')
def index():
    '''
    一项目首页：
    1.页面右上角检查用户登陆状态，显示用户登录信息，如果用户已登录，显示用户信息，否则提供登陆注册入口
    2.使用请求上下文对象session从redis中获取user——id
    3.根据user——id查询mysql，获取用户信息
    4.传给魔板
    二新闻分类展示：
    1.查询所有新闻分类
    三新闻点击排行
    查询新闻的点击（click）字段，倒叙

    '''
    user_id = session.get('user_id')
    user = None
    # 如果有user_id,查询mysql
    try:
        # user.query.get(user_id)
        user = User.query.filter_by(id=user_id).first()
    except Exception as e:
        current_app.logger.error(e)

    # 新闻分类
    try:
        categories = Category.query.all()
    except  Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询数据失败')
    # 判断查询结果
    if not categories:
        return jsonify(errno=RET.NODATA, errmsg='无新闻分类')
    # 定义列表容器，存储新闻分类数据
    category_lsit = []
    #遍历查询结果
    for category in categories:
        category_lsit.append(category.to_dict())

    # 新闻点击排行
    try:
        news_list = News.query.order_by(News.clicks.desc()).limit(constants.CLICK_RANK_MAX_NEWS)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询新闻点击失败')
    # 判断查询结果
    if not news_list:
        return jsonify(errno=RET.DATAERR, errmsg='无新闻点击数据')
    # 定义容器存储新闻排行数据
    news_click_list = []
    for news in news_list:
        news_click_list.append(news.to_dict())


    #定义字典，存储数据
    data = {
        'user_info': user.to_dict() if user else None,
        'category_list': category_lsit,
        'news_click_list': news_click_list
    }
    # # 实现状态保持
    # session['itcast'] = '2018'
    # 传入魔板数据
    return render_template('news/index.html', data=data)


# 项目：给页面添加logo
# http://127.0.0.1:500/favcion.ico
@news_blue.route('/favicon.ico')
def favcion():
    # 通过应用上下文对象，调用发送静态文件给浏览器
    return current_app.send_static_file('news/favicon.ico')


